perm filename BEAMS.OLD[OLD,LCS] blob sn#230577 filedate 1976-08-07 generic text, type T, neo UTF8
00100	C***** BEAMS,  XNOTE, BAUTO, UPDATE, SLEND, POSIT *******
00200		SUBROUTINE BEAMS
00300		INTEGER UPDN
00400		COMMON/XRN/RN(2000)
00500		COMMON/RINP/R(10,80),POSNT(0/99) /RMOD/RMODE2,SET4,IBEAM,
00600		1 NOSET,STEM,STUP,NTC,PS2,RAM,RDD,IT,POS
00700		1 /FRMT/F78F(1),FA1(1),FA5(1),IREAD /ALF/INP(72),ML
00800		1 /PTR/PWDS(250),ITEM,LL,IS,IX
00900		COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
01000		COMMON R2,JAZ,CENTR,JBZ,RJQ(20),JQ(20) /STF/RSTFAC(8),RSTJ2
01100		COMMON/SCX/RHY(4),JALPHA(30),JX,U,JZ,IRHY,JD,KA,KB,IZ
01200		1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
01300		1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
01400		DATA BX/25./,BY/.5/,DFAC/6./,CURV/0.9/
01500	C  THESE ARE USED TO DETERMINE CURVE OF SLURS AT 63 (21700)
01600	
01700		IF(RMODE.LT.500)GO TO 251
01800		IF(MODE.EQ.4)RETURN
01900	C  PICKS UP SLURS ONLY WHEN USING SUBR. 'EXTRA' *********
02000	251	INVT=-1
02100		IF(MODE.EQ.3)GO TO 25
02200		IF(REND.NE.0)GO TO 25
02300		REND=3
02400	25	DO 1500 K=1,72
02500		IF(INP(K).EQ.'B')GO TO 22
02600	C  B=AUTOMATIC BEAMS.
02700		IF(INP(K).NE.'*')GO TO 1500
02800	15	INP(72)='*'
02900		GO TO 500
03000	1500	IF(INP(K).EQ.ISEMI)GO TO 500
03100		GO TO 15
03200	C ABOVE FOR 2ND LNE OF INPUT. IF LNS ENDS WITHOUT * OR ;, IT PUTS IN *
03300	22	REREAD F78F,A,B,C
03400	C  TYPE '2B' OR '3B' ETC. FOR AUTOMATIC BEAMS. (2=DUPLE  3=TRIPLE)
03500		IF(IREAD.NE.-1)GO TO 1122
03600		A=B
03700		B=C
03800	C  IREAD=-1 WHEN READING SOS FILES. (=-2 WITH ET FILES.)
03900	1122	A=A/2.
04000	C  '2'=1  '3'=1.5   '2B 3;'  MEANS THERE'S A 3 NOTE PICK-UP.
04100		IF(STEM)STEM=0
04200	C STEM=10 OR 20 IF ALREADY SETUP IN NOTES
04300		K=0
04400		N=0
04500		J=0
04600		INP(72)='*'
04700	C  PICKS UP RHYTHM FROM TIME WHEN MODE=2 (NOW IT =4)
04800		IF(B.EQ.0)GO TO 122
04900		K=B
05000		B=0
05100		C=0
05200		DO 2122 NN=1,K
05300		IF(V(NN))GO TO 3122
05400		B=B+1
05500	C  UPDATE COUNTER
05600		GO TO 2122
05700	3122	N=N+1
05800	C TO SKIP OVER RESTS
05900	2122	C=C+ABS(V(NN))
06000		IF(B.LE.1)GO TO 122
06100		IF(C.GT.A)GO TO 122
06200	C SKIPS IF PICK-UP HAS LONGER TOTAL THAN BEAM RANGE (A)
06300		J=2
06400		VX(1)=1
06500		VX2=B
06600	C  PUTS BEAM ON PICK-UP IF MORE THAN ONE NOTE.
06700	122	K=K+1
06800		L=K
06900	222	C=ABS(V(K))
07000		IF(C.EQ.4./88.)GO TO 522 
07100	C  CATCHES 88TH NOTES (GRACE NOTES)???
07200		IF(V(K).GT.0)GO TO 922
07300	1022	N=N+1
07400	C  SUBTRACTS NUMB. FOR REST.
07500		IF(C.GE.A)GO TO 1222
07600	1322	L=L+1
07700		GO TO 422
07800	1222	IF(AMOD(C,A).NE.0)GO TO 622
07900		IF(K-L.LE.1)GO TO 522
08000		L=L+1
08100		GO TO 722
08200	922	IF(C.EQ.A)GO TO 522
08300		IF(C.GE.1)L=L+1
08400	422	IF(K.EQ.IRHY)GO TO 322
08500		K=K+1
08600	5022	B=V(K)
08700		IF(B.NE.4./88.)GO TO 2022
08800		JMP=K
08900	3022	IF(V(K+1).NE.4./88.)GO TO 4022
09000	C  TO BEAM GRACE NOTES WHEN IN AUTOMATIC MODE.
09100		K=K+1
09200		GO TO 3022
09300	C  GO BACK FOR MORE
09400	4022	IF(K.EQ.JMP)GO TO 422
09500	C  GO AWAY IF THERE IS ONLY ONE GRACE NOTE.
09600		CALL BAUTO(J,JMP,K,N)
09700	C  I HOPE THE ARGS. ARE OK!
09800		IF(JMP.EQ.L)L=K
09900	C DOES GRACE NOTE BEAM COME UNDER BIG BEAM(JMP≠L) OR NOT(JMP=L).?
10000		GO TO 422
10100	2022	C=C+ABS(B)
10200		IF(B.GT.0)GO TO 1922
10300		IF(-B.LT.A)GO TO 1022
10400	C GO BACK TO PUT A REST UNDER A BEAM.
10500		N=N+1
10600	C  UPDATE REST COUNTER IF IT GETS TO HERE.
10700	1922	IF(C.LT.A-.0001)GO TO 422
10800		IF(C.LT.A+.0001)GO TO 722
10900	C  .0001 FOR ROUNDOFF PROBLEMS
11000		C=AMOD(C,A)
11100		IF(K-L.LE.1)GO TO 622
11200		CALL BAUTO(J,L,K-1,N)
11300	622	L=K
11400		IF(ABS(V(K)).GE.A)GO TO 77
11500		IF(C.NE.0)GO TO 422
11600	77	L=L+1
11700		GO TO 422
11800	722	IF(K.EQ.L)GO TO 522
11900	1722	DO 1422 IT=L,K
12000		B=V(IT)
12100		IF(B.EQ.4./6.)GO TO 1522
12200		IF(B.EQ..875)GO TO 1422
12300	C .875=(8..)
12400		IF(B.GT..75)GO TO 1522
12500	1422	CONTINUE
12600	C WON'T PUT BEAMS WHERE NOT LOGICAL. CATCHES QUINTS AND SEXT'S.
12700		IF(V(L)+V(K).LT.A+.0001)CALL BAUTO(J,L,K,N)
12800	C  DOES ONLY DUPLES AT THIS POINT.
12900	522	IF(K.LT.IRHY)GO TO 122
13000	
13100	322	IF(J.EQ.0)RETURN
13200	C  NO BEAMS - SO GO BACK.
13300		DO 822 K=J+1,50
13400	C  USES ONLY 68 SLOTS IN 'V'
13500	822	VX(K)=0
13600		J=0
13700		GO TO 511
13800	1522	IF(IT-1.GT.L)GO TO 1622
13900	1822	L=IT+1
14000		IF(L.LT.K)GO TO 1722
14100		GO TO 522
14200	1622	CALL BAUTO(J,L,IT-1,N)
14300		GO TO 1822
14400	C  ALL THIS ↑↑ FOR QUARTERS IN TRIPLE TIME UNITS!
14500	CC27	DO 26 L=1,50
14600	CC26	VX(L)=V(L)
14700	C  BECAUSE MODE 3 IS NOW ACCENTS, ETC.
14800	CC	GO TO 511
14900	
15000	500	REREAD F78F,VX
15100		IF(MODE.EQ.5)NTC=NTC-1
15200	C  NTC=NUM OF NTS NOW
15300		J=0
15400		IF(IREAD.EQ.-1)J=1
15500	C  SKIPS LINE #S IN SOS FILES. (=-2 IS FOR ET FILES.)
15600	511	J=J+1
15700		N=VX(J)
15800		JMP=1
15900	505	L=0
16000		K=0
16100		POS=-10.
16200		IF(MODE.EQ.3)GO TO 5032
16300	C  MODE 3 IS FOR ACCENTS ETC.
16400		RN(8+IS)=0
16500		RN(9+IS)=0
16600		IT=0
16700		UPDN=0
16800		IF(MODE.EQ.5)GO TO 104
16900		IF(STEM.EQ.0)GO TO 503
17000	C  UPDN=2=STEMS DOWN, (SLUR DIP UP)  =1, OPPOSITE.
17100	104	JA=J+1
17200		B=VX(JA)
17300	C THE 2ND NOTE (-=DIP DOWN ALWAYS; +100=UP ALWAYS, ORD.=AUTOMATIC)
17400		IF(B.LT.100)GO TO 512
17500		UPDN=2
17600		B=B-100
17700		IF(B.GT.100)B=100-B
17800	C  TYPE -NUM OR 200+NUM FOR DIP DOWN.
17900	512	IF(B)UPDN=1
18000		VX(JA)=B
18100		IF(MODE.EQ.4)GO TO 503
18200		BRK=AMOD(VX(J),1.)*10.
18300		IF(BRK.EQ.0)GO TO 503
18400	C NEXT FOR TRIPL. BRACKET, ETC.  ADD DESIRED .NUM TO 1ST NUM.
18500		RN(9+IS)=BRK+.0001
18600		GO TO 5030
18700	503	IF(N.GT.0)GO TO 5031
18800		IT=-1
18900	C6/75	POS=-1.3
19000		CALL SLEND
19100	C  -1= SLUR INTO 1ST NOTE.
19200	C  SETS POS OF LFT SIDE (-10+9, THEN +2)
19300		GO TO 5060
19400	5031	IF(N.LE.NTC)GO TO 5030
19500	C  NTC=NUM OF NTS
19600	C6/75	POS=202
19700		CALL SLEND
19800	C  SLEND CHECKS ON END POINTS OF THIS STAFF
19900		GO TO 504
20000	C  -1=1ST SLUR FROM NO NOTE; 99= LAST, TO NO NOTE
20100	5032	IF(N.GT.IRHY)N=IRHY
20200	C TRAPS ERROR OF TRYING TO PUT MARK ON NON-EXISTENT NOTE.
20300	5030	L=L+1
20400	502	K=K+1
20500		IF(R(1,K).NE.1.)GO TO 502
20600	C  IS IT A NOTE?
20700		P=R(3,K)
20800		IF(P.EQ.POS)GO TO 502
20900	C  SKIPS DBLSTPS
21000		POS=P
21100	506	IF(L.LT.N)GO TO 5030
21200	5060	IF(MODE.EQ.3)GO TO 30
21300	C  NOW SLUR STARTS
21400		IF(JMP)GO TO 504
21500	C  JMP=-1 MEANS END NOTE OF GROUP
21600		J=J+1
21700		NN=VX(J)
21800	C  IF 2ND NUM IS .LE. 1ST , THEN 2-NOTE SLUR. (-1 GOES TO 1)
21900		IF(NN.EQ.0)NN=N+1
22000		IF(NN.EQ.0)NN=1
22100		IF(NN)GO TO 777
22200		IF(NN.LE.N)NN=N+1
22300	C  FOR USE WITH AUTO-BEAMS OR DIP UP.  2-NOTE SLUR OR BEAM UP.
22400	CC777	IF(STEM)GO TO 5061
22500	777	IF(MODE.NE.4)GO TO 5061
22600	CC	IF(MODE.NE.4)GO TO 177
22700		IF(STEM.LE.0)GO TO 5061
22800	C  AUTOMATIC DIP DIRECTION FOR SLURS WITH AUTO. BEAMS.
22900	177	MK=K
23000	877	IF(R(1,MK).EQ.1)GO TO 477
23100		MK=MK+1
23200		GO TO 877
23300	C  FOR SLUR INTO FIRST NOTE WITH AUTO BEAMS.
23400	477	A=19.-R(5,MK)
23500		IF(NN.GE.0)GO TO 277
23600		IF(A.GT.0)GO TO 377
23700	277	IF(A.GE.0)GO TO 5061
23800		IF(NN.LE.0)GO TO 5061
23900	377	NN=-NN
24000	5061	MK=N
24100		N=IABS(NN)
24200		M=K
24300		JA=3
24400		JB=4
24500		KN=K
24600		RB=0
24700		IF(MODE.EQ.4)GO TO 550
24800		IBR=6
24900	C  6=SLUR, 7=BRACK. FOR TRIPLETS, ETC.
25000	CC*** NOT NEEDED NOW WITH UPDN FEATURE.	IF(STEM.GE.0)NN=-NN
25100		IF(IT)GO TO 550
25200	C  IT=-1=SLUR INTO 1ST NOTE.
25300		A=XNOTE(K)
25400	C XNOTE IS AMOD(R(4,K),100.)
25500	C  SAVES LEVEL OF 1ST NOTE.
25600	504	RB=2
25700		B=AMOD(R(6,K),1.0)
25800		IF(B.GE.0.5)RB=3.
25900		IF(B.EQ.0.4)RB=5.
26000	C   THESE ARE FOR >(.5) AND ∧(.4) ACCENTS
26100		IF(NN)RB=-RB
26200	C  DIP IS SET BY PARAM 7. (STEM DIR. IS AUTOMATIC)
26300	550	RN(JA+IS)=POS
26400		B=XNOTE(K)
26500		IF(MODE.EQ.4)GO TO 519
26600	C  TO MAKE MINI-BEAMS ON GRACE NOTES WHEN NEEDED.
26700		IF(MODE.NE.5)GO TO 513
26800		SLUR=0
26900	C A FLAG FOR LATER USE.
27000		MB=R(5,K)/10.
27100	CC	IF(JMP.GE.0.AND.UPDN.EQ.0)GO TO 515
27200		IF(UPDN.EQ.0)GO TO 515
27300		IF(MB.EQ.0)MB=UPDN
27400	C  MB=0 IF 2ND NOTE IS WITHOUT STEM
27500		IF(MB.EQ.UPDN)GO TO 515
27600		X=6
27700		IF(RB)X=-X
27800		RB=RB+X
27900		JA=3
28000		IF(JMP)JA=6
28100		IF(RB)GO TO 204
28200		IF(UPDN.EQ.2)GO TO 516
28300	204	IF(UPDN.EQ.1)GO TO 516
28400	C  ABOVE FOR VARIOUS COMBINATIONS OF STEM DIRECTIONS
28500		RB=-RB
28600		NN=-NN
28700	516	IF(K.GT.1)GO TO 16
28800		IF(IT)GO TO 513
28900	16	IF(K.NE.NTC)GO TO 116
29000		IF(N.GT.NTC)GO TO 513
29100	C JUMP IF N=99, BY PASS IF K IS NOT LAST NOTE OF LINE.
29200	116	SLUR=1.
29300		IF(UPDN.EQ.1)SLUR=-SLUR
29400		SLUR=SLUR*RSTJ2
29500		RN(JA+IS)=RN(JA+IS)+SLUR
29600	C  THIS NOT DONE IF SLUR TO FIRST NOTE
29700		GO TO 513
29800	CC519	B=R(4,K)
29900	519	A=R(10,K)
30000		IF(A.EQ.0)GO TO 513
30100	C JUMP IF IT'S NOT ON DIFF STF.
30200		RA=RSTJ2*2.44
30300	C  NOTE WIDTH
30400	CC	IF(ABS(B).GE.100)RA=RA*.6
30500		IF(ABS(R(4,K)).LT.80)GO TO 520
30600		RA=RA*.6
30700		IF(JMP)B=B-100
30800	C  MINI
30900	520	IF(A.EQ.2)RA=-RA
31000	C  STAFF ABOVE
31100		RN(JA+IS)=POS+RA
31200	C  ***** THIS CAN BE OFF A LITTLE IN SOME CASES!!******
31300		GO TO 513
31400	
31500	
31600	517	IF(MB.EQ.1)GO TO 513
31700		IF(RB)RB=-RB
31800		GO TO 518
31900	515	UPDN=MB
32000	C AUTO SLUR DIP DEPENDS ON STEM DIREC. OF 1ST NOTE. (WHOLE NTS??)
32100		IF(NN)GO TO 517
32200		IF(MB.NE.1)GO TO 513
32300		RB=-RB
32400	518	NN=-NN
32500	513	RN(JB+IS)=B+RB
32600	C  MK=# OF 1ST NOTE, N=END NOTE NOW
32700		JMP=-JMP
32800		IF(JMP.GT.0)GO TO 1503
32900	C  GO FIND RT. SIDE OF SLUR
33000		JA=6
33100		JB=5
33200		IF(N.LE.MK)N=MK+1
33300	C  PICKS UP TYPO ERRORS
33400		JK=0
33500		IF(R(7,K).GE.10)JK=-1
33600	C  CHECKS FOR DOT AFTER 1ST NOTE -- FOR TIES.
33700		GO TO 503
33800	
33900	1503	RN(2+IS)=STAFF
34000		IF(MODE.EQ.4)GO TO 35
34100		RN(8+IS)=-1
34200		RN(1+IS)=5
34300		IF(IT)RN(4+IS)=RN(5+IS)
34400		NN=-NN
34500	C  IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
34600		IF(MK.EQ.IRHY)GO TO 61
34700		IF(N.EQ.1)GO TO 61
34800	CC	IF(((XNOTE(K).NE.A.OR.N-MK.GT.1).AND.IT.GE.0.
34900	CC	1 ).OR.IT)GO TO 60
35000		IF(IT)GO TO 60
35100		IF(XNOTE(K).NE.A)GO TO 60
35200		IF(N-MK.GT.1)GO TO 60
35300	CCC	IF(R(5,M).NE.R(5,K))GO TO 65
35400	CCC  FOR SLUR OVER CHROMATIC CHANGE ON SAME NOTE NAME.
35500	C  M=1ST NOTE OF SLUR, K=LAST
35600		IF(AMOD(R(5,K),10.0).GT.0)GO TO 65
35700	C  JUMP IF LAST NOTE AS ACCI.
35800	C  JUMP IF NOT ADJACENT NOTE AT SAME PITCH AND NOT 1ST OR LAST.
35900	61	C=9
36000		IF(JK)C=12
36100		IF(RN(6+IS)-RN(3+IS)-C*RSTJ2)GO TO 65
36200	C  JUMP IF SLUR IS VERY SHORT
36300		IF(IT)A=XNOTE(K)
36400	C  IT=-1=SLUR INTO 1ST NOTE.
36500		A=A+.7
36600		IF(NN.GT.0)A=A-1.4
36700	C  TO RAISE OR LOWER IT .5
36800		RN(4+IS)=A
36900		RN(5+IS)=A
37000		B=-2
37100		IF(JK)B=-3
37200	C  JK=-1 WHEN NOTE IS DOTTED.
37300	C THIS PUTS TIE BETWEEN (NOT ABOVE OR BELOW) NTS. NO STEM CHNG.
37400		RN(8+IS)=B
37500		IF(SLUR.EQ.0)GO TO 65
37600		RN(3+IS)=RN(3+IS)-SLUR
37700		RN(6+IS)=RN(6+IS)-SLUR
37800	C  PUSH SLUR BACK TO WHERE IT WAS
37900		GO TO 65
38000	
38100	C** 6/16/75 60	IF(STEM.GE.0)GO TO 508
38200	60	IF(STEM.GE.0)GO TO 200
38300		IF(MODE.EQ.5)GO TO 200
38400	C  JUMP IF SLURS**************
38500	C  NEXT IS STEM INVERTER.  SKIP IF AUTOMATIC BEAMS OR 'SU' 'SD' IN USE.
38600		JB=1
38700		RB=10.
38800		IF(NN)GO TO 509
38900	C  IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
39000		RB=-RB
39100		JB=2
39200	509	DO 507 L=M,K
39300		IF(R(1,L).NE.1.)GO TO 507
39400		JA=R(5,L)/10.
39500		IF(JA.NE.JB)GO TO 507
39550		IF(R(10,L).NE.0)GO TO 507
39560	C LEAVE NOTE ON OTHER STAFF ALONE.
39600		R(5,L)=R(5,L)+RB
39700		INVT=0
39800	C**********************************************
39900	507	CONTINUE
40000	CC508	IF(N.GT.100)GO TO 514
40100	C**** NO LONGER USED.  USE 'SD' 'SU' **  JUMP IF ONLY REVERSING STEMS.
40200		GO TO 200
40300	62	IF(NN)GO TO 64
40400		IF(A.EQ.DMAX)GO TO 65
40500		AA=B-DMAX
40600		GO TO 63
40700	65	AA=0
40800		GO TO 63
40900	64	IF(A.EQ.UMAX)GO TO 65
41000		AA=UMAX-B
41100	63	RA=RN(6+IS)
41200		RB=RN(3+IS)
41300		X=CURV+(RA-RB)/BX+ABS(RN(4+IS)-RN(5+IS))/10.
41400	C  CURVE DEPENDS ON LENGTH, TILT AND NOTES BETWEEN.
41500		IF(AA.GT.0)X=X+AA*BY
41600		IF(BRK.EQ.0)GO TO 66
41700		RN(8+IS)=1
41800		RN(3+IS)=RB-.6
41900		RB=R(3,K+1)
42000	C  K=END NOTE OF GROUP
42100		IF(K.EQ.IRHY)RB=200.
42200	C  ASSUMES LINE STOPS AT 200. (IT COULD BE LONGER!!)
42300		RN(6+IS)=RA+(RB-RA)/2.
42400		IBR=7
42500	C  CHECK THESE NUMBERS↑↑↑↑
42600		B=RN(4+IS)
42700		BB=RN(5+IS)
42800		RA=1
42900		IF(A.LT.-1)RA=2.5
43000	C  CHANGES HEIGHT.  MAKES BRACK. IF N>100.
43100		IF(NN.GT.0)RA=-RA
43200		RN(4+IS)=B+RA
43300		RN(5+IS)=BB+RA
43400		X=2
43500	66	IF(NN.GT.0)X=-X
43600	510	RN(7+IS)=X
43700		IF(MODE.NE.4)GO TO 2514
43800		RN(9+IS)=0
43900		RN(10+IS)=0
44000		RN(IS+11)=-1
44100		CALL UPDATE(9)
44200		IF(JB)CALL BMX(RA)
44300		GO TO 514
44400	2514	L=IS
44500		CALL UPDATE(IBR)
44600		IF(M.EQ.K)GO TO 514
44700	C JUMP OUT IF INTERVENING NOTE.
44800		IF(RN(L+4).NE.RN(L+5))GO TO 514
44900	C  IS IT LEVEL?
45000		B=-RN(IS-2)
45100	C CHANGE DIRECTION OF DIP AFTER FIRST SLUR.
45200		RA=1.4
45300		IF(RN(L+8).EQ.-1)RA=RA+1.3
45400	C  IS TIE NOT BETWEEN NOTES?
45500		IF(NN.GT.0)RA=-RA
45600	C DIP DIRECTION.  NN+ =DOWN, NN- =UP.  REVERSED AFTER 1ST ONE.
45700	CC	RA=R(4,M)+RA
45800		RA=XNOTE(M)+RA
45900		C=-2.
46000		IF(RN(L+8).EQ.-3.)C=-3.
46100	C PUT TIE BETWEEN NOTES ALWAYS.
46200		JA=M
46300		JB=K
46400	114	JA=JA+1
46500		JB=JB+1
46600		IF(R(1,JA).NE.1)GO TO 514
46700	C  CATCHES THINGS BETWEEN NOTES
46800		IF(R(4,JA).NE.R(4,JB))GO TO 514
46900	C  LOOKS FOR  PARALLEL CHORDS NOTES
47000		IF(R(9,JA)+R(9,JB).NE.0)GO TO 514
47100	C  MAKES SURE THEY ARE CHORD NOTES.
47200	CC	A=R(4,JA)-RA+RN(L+5)
47300		A=XNOTE(JA)-RA+RN(L+5)
47400		RN(IS)=6.
47500		RN(IS+1)=5.
47600		RN(IS+2)=RN(IS-7)
47700		RN(IS+3)=RN(IS-6)
47800		RN(IS+6)=RN(IS-3)
47900		RN(IS+7)=B
48000		RN(IS+8)=C
48100		RN(IS+4)=A  
48200		RN(IS+5)=A  
48300		CALL UPDATE(IBR)
48400		GO TO 114
48500	514	J=J+1
48600		A=VX(J)
48700		N=A
48800	C  SO ITEMS NEED NOT BE IN RIGHT ORDER.
48900		IF(MOD(N,100).GT.IRHY)A=0
49000		IF(A.NE.0)GO TO 505
49100		IF(J.LT.50)GO TO 514
49200	C  SOMETIMES A SLASH IS SEEN AS A 0 (WHEN PRECEDED BY SPACE).
49300		IF(INP(72).NE.'*')GO TO  552
49400		IF(INVT)RETURN
49500		INVT=IS
49600		CALL NEWR
49700		IS=INVT
49800		RETURN
49900	552	IF(IREAD.NE.0)GO TO 3501
50000		CALL TYPE
50100		WRITE(21,4501)INP
50200		GO TO 5501
50300	3501	IF(IREAD.EQ.-1)READ(22,2501)J,INP
50400		IF(IREAD.EQ.-2)READ(22,4501)INP
50500	5501	CALL LNEND
50600	C  FOR NEW 'SCORE' CONVENTIONS
50700	C  TO READ MORE THAN 2 LINES.
50800		GO TO 25
50900	C  FOR 2ND LINE.
51000	4501	FORMAT(72A1)
51100	2501	FORMAT(I,72A1)
51200	
51300	
51400	35	RA=10.
51500	C  RA WILL=# OF TAILS,  KN=1ST NOTE, K=LAST ('MOD' FOR DOTTED NOTES.)
51600		RN(1+IS)=6
51700		JMAX=0
51800		IF(N-MK.EQ.1)JMAX=-1
51900		DMAX=100.
52000		UMAX=-DMAX
52100	C  FOR AUTO. BEAMS
52200	
52300		JB=0
52400		MB=0
52500	C MB=-1 =GRACE NOTES UNDER BEAMS.  
52600		IF(ABS(R(4,KN)).GE.80.)MB=-1
52700		DO 2 L=KN,K
52800		IF(R(1,L).NE.1)GO TO 2
52900		BB=R(5,L)
53000		IF(BB.GE.10.)GO TO 12
53100		UPDN=-1
53200	CC	IF(R(10,L).EQ.0)NN=19.-AA
53300		NN=19-AA
53400	CHORDS WILL HAVE FIXED STEM DIRECTIONS ALWAYS
53500		GO TO 2
53600	C  SKIPS NON-NOTES AND DBLSTPS
53700	12	IF(MB)GO TO 10
53800		AA=BB
53900		RB=R(4,L)
54000		IF(ABS(RB).GE.80)GO TO 2
54100	C  SKIPS GRACE NOTES
54200		GO TO 110
54300	10	RB=XNOTE(L)
54400	110	IF(RB.GT.UMAX)UMAX=RB
54500		IF(RB.LT.DMAX)DMAX=RB
54600	C  FOR AUTO. BEAMS
54700		RB=AMOD(R(7,L),10.0)
54800	112	IF(RA.EQ.RB)GO TO 2
54900		JB=-1
55000	C   FLAG FOR MIXED NUM. OF BEAMS
55100		IF(RB.GE.RA)GO TO 2
55200		IF(RB.NE.0)RA=RB
55300	2	CONTINUE
55400	C  ABOVE FINDS SMALLEST # OF TAILS.  NEXT FOR HGTS.
55500	C  ABOVE IS POS.2
55600		IT=K
55700	C  FOR EXTRA BEAMS WITH CHORDS. SAVE IT IN "IT"
55800		IF(STEM.GT.0)GO TO 577
55900	C  *****↑↑↑↑↑↑ ABOVE WAS ".NE." BEFORE 4/30/76. WHY?#@&Xαε
56000		IF(UPDN.NE.0)GO TO 577
56100		IF(UMAX+DMAX.GE.14)NN=-1
56200	CXX	IF(STEM.GT.0)NN=10.-STEM
56300	C  SETS AUTO. BEAMS' STEM DIRECTION.
56400	577	X=10
56500		IF(NN)X=20
56600		IF(MB)RA=2
56700	C  2 BEAMS ON GRACE NOTES ALWAYS
56800		X=X+RA
56900	C  # OF BEAMS.  IT'S PUT IN  DOWN BELOW 550.
57000	200	M=KN
57100	207	L=M+1
57200		IF(R(1,L).NE.1)GO TO 307
57300		IF(R(9,L).NE.0)GO TO 307
57400		M=M+1
57500		GO TO 207
57600	C  FOR HEIGHTS OF DBL STPS, ETC.
57700	307	A=XNOTE(M)
57800	C   A=NOTE 1.
57900		UMAX=A
58000		DMAX=A
58100	C  UP MAX. NOTE #, DOWN MAX. NOTE #.
58200	407	M=K+1
58300		IF(R(1,M).NE.1)GO TO 103
58400		IF(R(9,M).NE.0)GO TO 103
58500	C  FINDS DBL+ STP ON LAST OF BEAM
58600		K=M
58700		GO TO 407
58800	103	DO 3 M=KN,K
58900		IF(R(1,M).NE.1)GO TO 3
59000		IF(M.EQ.K)GO TO 107
59100		IF(R(10,M).NE.0)GO TO 107
59200		IF(R(9,M+1).EQ.0)GO TO 3
59300	C  IGNORE LOWER (OR UPPER) NOTES OF CHORDS - IN RE. UP-DOWN FEATURE.
59400	107	IF(MB)GO TO 7
59500	C  SKIP IF DEALING WITH GRACE NOTE BEAMS. (MB=-1)
59600		IF(ABS(R(4,M)).GE.100)GO TO 3
59700	C  SKIPS NON-NOTES
59800	7	B=XNOTE(M)
59900	CC	IF(STEM.GT.0)GO TO 55
60000	CC	IF(MODE.NE.5)GO TO 677
60100	CC	IF(STEM.EQ.0)GO TO 55
60200		IF(MODE.EQ.5)GO TO 55
60300	677	Y=R(5,M)
60400	33	IF(NN.GT.0)GO TO 5
60500	C  JUMP IF STEM UP
60600		IF(Y.GE.20.)GO TO 55
60700		IF(Y.LT.10.)GO TO 55
60800		R(5,M)=Y+10.
60900		GO TO  551
61000	5	IF(Y.LT.20.)GO TO 55
61100		R(5,M)=Y-10.
61200	C************************
61300	C    STEM UP
61400	551	INVT=0
61500	55	IF(B.LE.UMAX)GO TO 13
61600	C ↑↑↑↑↑↑↑↑ WAS .LT. !!!!! 5/76
61700		UMAX=B
61800		IF(JMAX)GO TO 3
61900		IF(M.EQ.KN)GO TO 3
62000		IF(M.EQ.K)GO TO 3
62100		UMAX=UMAX+1
62200		GO TO 3
62300	13	IF(B.GT.DMAX)GO TO 3
62400		DMAX=B
62500		IF(JMAX)GO TO 3
62600		IF(M.EQ.KN)GO TO 3
62700		IF(M.EQ.K)GO TO 3
62800		DMAX=DMAX-1
62900	3	CONTINUE
63000	C  LOOKS FOR LOWER AND HIGHER NOTES THAN NOTE 1.
63100	4	IF(MODE.EQ.5)GO TO 62
63200		K=IT
63300	C  FOR EXTRA BEAMS WITH CHORDS. K WAS SAVED IN "IT"
63400		AA=A
63500		BB=B
63600		C=1
63700		IF(X.LT.20.)GO TO 48
63800	C  JUMP IF STEM IS UP
63900		CALL EXCH(AA,BB)
64000		C=-C
64100		CALL EXCH(UMAX,DMAX)
64200	48	IF(AA.LT.BB)GO TO 45
64300		IF(UMAX.EQ.A)GO TO 46
64400	47	A=UMAX-C
64500		B=A
64600		GO TO 444
64700	46	IF(UMAX.GT.AA)GO TO 47
64800		GO TO 49
64900	45	IF(UMAX.NE.B)GO TO 47
65000	49	A=AA
65100		B=BB
65200		IF(X.GE.20)CALL EXCH(A,B)
65300	
65400	444	RN(2+IS)=STAFF 
65500	446	DIS=(RN(IS+6)-RN(IS+3))/DFAC
65600	C  FOR TILT LATER -- DFAC IS IN DATA
65700		IF(ABS(A-B).LT.DIS)GO TO 14
65800		C=C*DIS
65900	C  NEW TILT ROUTINE.  CONSIDERS DISTANCE:HEIGHT
66000	C  LIMITS SLOPE OF BEAM
66100		IF(X.GE.20)GO TO 141
66200		IF(B.GT.A)GO TO 140
66300	142	B=A-C
66400		GO TO 14
66500	141	IF(B.GT.A)GO TO 142
66600	140	A=B-C
66700	14	IF(MB.EQ.0)GO TO 143
66800	C NEXT FOR GRACE NOTE BEAMS (MB=-1)
66900		C=100
67000		IF(A)C=-C
67100		A=A+C
67200	143	RN(4+IS)=A
67300		RN(5+IS)=B
67400	C   MAKES HORIZONTAL BEAMS IF PATTERN IS UP-DOWN.
67500	C*******??????	RN(6+IS)=R(3,K)
67600	C  ABOVE IS POS.2
67700		GO TO 510
67800	
67900	C   NEXT IS FOR ACCENTS AND OTHER MARKS
68000	
68100	30	CALL MARKS(RA)
68200		J=J+1
68300		IF(RA.EQ.99)RA=VX(J)
68400	C  IF STEM IS DOWN OR THERE ARE NOTES BELOW(DBL STP), POSITION
68500	C    OF ACCENT WILL BE INVERTED.
68600		IF(RA.LT.40)GO TO 304
68700		NN=6
68800		BB=-6
68900		A=3
69000		B=3
69100		IF(XNOTE(K).LT.3)BB=XNOTE(K)-9.5
69200	C LOWERS ITEM IF NOTE BELOW STAFF.  BUT IS 'K' ALWAYS OK HERE??????
69300		IF(RA.LT.99)GO TO 305
69400	C NEXT FOR CRESC. & DECRSC. LINES<,>. TYPE /NT1 C+ NT2/ OR /N1.d  C- N2.d/
69500		NN=8
69600		BB=BB+2.5
69700		A=5
69800		B=4
69900		RN(IS+7)=RA-200
70000	C  MAKES ZERO OR -1 IN P7
70100		RA=50
70200	C  ADDS A NEW ITEM.  MP, PP, CRESC., ETC. --CODE 3
70300	305	RN(IS)=A
70400		RN(IS+1)=B
70500		RN(IS+2)=STAFF
70600	C  PUTS MF, ETC. BETWEEN NOTES.  (I HOPE)  SEE 'FUNCTION POSIT' BELOW
70700		RN(IS+3)=POSIT(VX(J-1))-1
70800	C  '-1' PUSHES IT TO LEFT. MAYBE CHANGE ORIGINAL POSITIONS??
70900		RN(IS+4)=BB
71000	C  DIST. BELOW STAFF
71100		RN(IS+5)=RA
71200	C  THE CODE NUM IN 'CLEFS' LIST
71300		IS=IS+NN
71400		IF(NN.EQ.6)GO TO 514
71500		J=J+1
71600		RN(IS-2)=POSIT(VX(J))
71700	C  THIS IS P6 (POS2 FOR CRESC. LINES)
71800		GO TO 514
71900	304	RB=R(6,K)
72000		B=10.
72100		IF(RA.EQ.6)RA=26.
72200	C TEMPORARY CHANGE FOR FERMATA*******
72300		IF(RA.GT.10.)RA=RA/10.
72400		A=ABS(AMOD(RB,1.))
72500		IF(A.EQ.0)GO TO 301
72600		IF(RA.GT.3)GO TO 303
72700		RB=FLOAT(IFIX(RB))
72800		RA=RA+A/10.
72900	C  THIS PUTS 2-DIGIT CODE BEFORE 1-DIGIT CODE.
73000		GO TO 301
73100	303	IF(A.LT..3)GO TO 302
73200		B=100.
73300		GO TO 301
73400	302	B=1000.
73500	301	IF(RB.LT.0)RA=-RA
73600		R(6,K)=RB+RA/B
73700		GO TO 514
73800	C   USES 4-7,9,11-13 FOR ACC. > FERM. DOT - DNBOW UPBOW HARM.
73900	C  NOTE#,ACCENT#/N,A/N,A*
74000		END
74100	
74200	CF	FUNCTION XNOTE(J)
74300	CF	COMMON/XRN/RN(4000)
74400	CF	DIMENSION R(10,80)
74500	CF	EQUIVALENCE (R,RN(3001))
74600	CF	XNOTE=AMOD(R(4,J),100.)
74700	CF	END
74800	
74900	CF	SUBROUTINE BAUTO(J,L,K,N)
75000	C  FOR AUTOMATIC BEAMS.
75100	CF	COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
75200	CF	J=J+2
75300	CF	V(J-1)=L-N
75400	CF	V(J)=K-N
75500	CF	END
75600	
75700	CF	SUBROUTINE UPDATE(I)
75800	CF	COMMON /PTR/PWDS(250),ITEM,LL,IS,IX /XRN/RN(4000)
75900	CF	RN(IS)=I
76000	CF	IS=IS+I+3
76100	CF	END
76200	
76300	C	SUBROUTINE SLEND
76400	C	INTEGER PWDS
76500	C  TO FIND END POINTS OF STAVES
76600	C	COMMON/XRN/RN(2000),IT,POS,RA,NN,JB,RB,A,B,JMP,JK,C,DMAX,
76700	C	1 UMAX,AA,JMAX,X,Y,BB,RNX(1982)
76800	     1/SCM/V(78),I,LCNT,STAFF,LIST(200),REND/PTR/PWDS(250),ITEM,LL,IS,IX
76900	C	DO 1 K=1,ITEM
77000	C	L=PWDS(K)
77100	C	IF(RN(L+1).NE.8)GO TO 1
77200	C  FOUND A STAFF
77300	C	IF(RN(L+2).NE.STAFF)GO TO 1
77400	C GOT THE RIGHT ONE
77500	C	IF(IT)GO TO 2
77600	C	POS=202
77700	C NOW CHECK LEFT SIDE OF STAFF
77800	C	IF(RN(L).LT.4)RETURN
77900	C P6 WASN'T MENTIONED - SO IT =200
78000	C	POS=RN(L+6)+2
78100	C	IF(POS.EQ.2)POS=202
78200	C	RETURN
78300	C2	POS=RN(L+3)-2.3
78400	C	RETURN
78500	C1	CONTINUE
78600	C	END
78700	
78800	C	FUNCTION POSIT(V)
78900	C	COMMON/XRN/RN(4000)
79000	C	DIMENSION POSNT(0/82)
79100	C	EQUIVALENCE (POSNT,RN(3801))
79200	C	1,(A,RN(3884)),(K,RN(3885))
79300	C	IF(V)V=-V
79400	C  REREAD OR SOMETHING MAKES /1 C- 2/ GIVE A -2 FOR LAST NUM.!!!???
79500	C	K=V
79600	C	A=POSNT(K)
79700	C	POSIT=A+(POSNT(K+1)-A)*AMOD(V,1.0)
79800	C  TYPE  /2.3 -- FOR POSITION BETWEEN NTS 2 AND 3. ETC.
79900	C	END